iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

探索 Spring Boot Doc系列 第 21

JOptCommandLinePropertySource

  • 分享至 

  • xImage
  •  

除了前一日的 SimpleCommandLinePropertySource 之外,這裡官方提到的另一個實作CommandLinePropertySource 子類就是這裡的 JOptCommandLinePropertySource 。

那什麼是JOpt…..這源自於 joptsimple ,那這個是什麼 ?
這是一個專案,是一個用來解析指令列選項的 Java Library 。

public class JOptCommandLinePropertySource
extends CommandLinePropertySource<joptsimple.OptionSet>

上方來自 org.springframework.core.env JOptCommandLinePropertySource 的內容,
這裡看到抽象父類別的範型為 joptsimple.OptionSet,那我們看一下 joptsimple 其下的 OptionSet。

jOpt 給類別 OptionSet 的描述如下

Representation of a group of detected command line options, their arguments, and non-option arguments.

代表一群偵測到的指令選擇,他們的參數, 和非選擇參數。

下方範例簡單說明如何使用 joptsimple

import joptsimple.OptionParser;
import joptsimple.OptionSet;

public class OptionParserTest {
	public static void main(String[] args) throws Exception {
		OptionParser parser = new OptionParser();
		parser.accepts("zookeeper", "it is required").withRequiredArg().
			describedAs("zookeeper connect address.").ofType(String.class);
		OptionSet options = parser.parse(args);
		if (!options.has("zookeeper")) {
			throw new Exception("zookeeper is required");
		}
		System.out.println((String)options.valueOf("zookeeper"));
	}
}

若將上述內容打包成 jar 包,並執行下方指令

java -jar OptionParserTest 

因爲這裡有透過 OptionSet.has(String option) 檢查使用者是否有提供 Option Argument zookeeper,沒有的話就會會傳丟出例外,達到提示使用者的效用。
如果使用者輸入以下指

java -jar OptionParserTest --zookeeper localhost:2181

那終端就會顯示 localhost:2181

這個例子使用的 zookeeper ,其實意指 Kafka 底層技術會用到的 Apache ZooKeeper 。
而 Kafka 確實會用到 jopt 這個 Library 去檢查使用者輸入的參數。

Kafka 再啟動之初會需要透過 Option Argument zookeeper-server 提供 port 號,但後來
Option Argument 改成 bootstrap-server ,若仍用舊的 zookeeper-server ,就會遇到
Kafka 拋出例外 joptsimple.UnrecoginizedOption

參考資料

{官方} JOptCommandLinePropertySource

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/JOptCommandLinePropertySource.html

{官方} JOpt OptionSet
https://jopt-simple.github.io/jopt-simple/apidocs/joptsimple/OptionSet.html

JOpt 解析命令列
https://blog.csdn.net/yangyijun1990/article/details/109137504

joptsimple.UnrecoginizedOption 例外訊息
https://blog.csdn.net/qq_41428418/article/details/132226272?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-132226272-blog-45576825.235^v38^pc_relevant_default_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-132226272-blog-45576825.235^v38^pc_relevant_default_base3&utm_relevant_index=5


上一篇
SimpleCommandLinePropertySource
下一篇
Annotation PropertySource
系列文
探索 Spring Boot Doc30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言